package cn.udesk.web.utils;

import java.text.SimpleDateFormat;
import java.util.List;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.ObjectMapper;

/**
 * json工具类
 * 
 * @author gongym
 */
public class JsonUtils {

  // 定义jackson对象
  private static final ObjectMapper MAPPER = new ObjectMapper();
  /**
   * 序列化中的时间格式化
   */
  private static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";

  /**
   * 将对象转换成json字符串。
   * <p>
   * Title: pojoToJson
   * </p>
   * <p>
   * Description:
   * </p>
   * 
   * @param data
   * @return
   */
  public static String objectToJson(Object data) {
    try {
      MAPPER.setDateFormat(new SimpleDateFormat(DEFAULT_DATE_FORMAT));
      return MAPPER.writeValueAsString(data);
    } catch (JsonProcessingException e) {
      e.printStackTrace();
    }
    return null;
  }

  /**
   * @Title: objectToJson @Description: 自定义事件格式化的JSON转换 @param data @param dateFormat @return
   * String @throws
   */
  public static String objectToJson(Object data, String dateFormat) {
    try {
      MAPPER.setDateFormat(new SimpleDateFormat(dateFormat));
      return MAPPER.writeValueAsString(data);
    } catch (JsonProcessingException e) {
      e.printStackTrace();
    }
    return null;
  }

  /**
   * 将json结果集转化为对象
   * 
   * @param jsonData json数据
   * @param clazz 对象中的object类型
   * @return
   */
  public static <T> T jsonToPojo(String jsonData, Class<T> beanType) {
    try {
      return MAPPER.readValue(jsonData, beanType);
    } catch (Exception e) {
      e.printStackTrace();
    }
    return null;
  }

  /**
   * 将json数据转换成pojo对象list
   * <p>
   * Title: jsonToList
   * </p>
   * <p>
   * Description:
   * </p>
   * 
   * @param jsonData
   * @param beanType
   * @return
   */
  public static <T> List<T> jsonToList(String jsonData, Class<T> beanType) {
    JavaType javaType = MAPPER.getTypeFactory().constructParametricType(List.class, beanType);
    try {
      return MAPPER.readValue(jsonData, javaType);
    } catch (Exception e) {
      e.printStackTrace();
    }
    return null;
  }
}
